package com.service;
import com.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;

@Service
//Transactional:添加事务注解，可以放在service或者方法上面，放在类上面表示类里面所有的方法都可添加事务
//放在方法上时表示这个方法可以添加事务。
/*
配置事务相关参数
propagation：事务传播行为
ioslation:事务隔离级别，解决脏读，不可重复读和虚读。 READ UNCOMMITTED：什么都不可以解决，READ COMMITTED:解决脏读
                     REPEATABLE READ：解决脏读和不可重复读,默认级别。SERIALIZABLE：都可以解决
timeout:超时时间，事务需要在一定时间内进行提交，如果不提交进行回滚，默认值是-1,
readOnly：是否只读
rollbackFor：回滚
noRollbackFor：不回滚
 */
@Transactional//(readOnly = false,timeout = -1,propagation = Propagation.REQUIRED,isolation = Isolation.REPEATABLE_READ)
public class UserService {

    //注入dao
    @Autowired
    private UserDao userDao;

    //转账的方法
    public void accountMoney() {
//        try {
            //第一步 开启事务

            //第二步 进行业务操作
            //lucy少100
            userDao.reduceMoney();

            //模拟异常
//            int i = 10/0;

            //mary多100
            userDao.addMoney();

            //第三步 没有发生异常，提交事务
//        }catch(Exception e) {
            //第四步 出现异常，事务回滚
//        }
    }
}
